package com.LFLWZ.utils;


import io.minio.MinioClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;

import static org.apache.log4j.helpers.LogLog.error;

/**
 * 对象存储服务 MinIo上传工具类
 *
 * @author kups
 * @since  2020-12-5
 */

@Slf4j
public class MinioUtil {


    private static final String url = "http://121.36.30.36:9000";
    private static final String accessKey = "admin";
    private static final String secretKey = "j348admin";
    private static final String bucket="j348teaching";


    /**
     * 选择具体存放位置：
     *  所属分类：商品、用户
     *  【注意】 桶是全局唯一的,若要存放到子文件夹则需要把路径加在文件名前。
     * @param i
     * @return
     */
    public static String type(int i) {
        if (i == 1) {
            return "goods/";
        } else if (i == 2) {
            return "user/";
        }else {
            return "";//存放到跟目录
        }
    }

    /**
     * 上传单个图片
     * 不止于图片！
     * @return 图片对象
     */
    public static String uploadImage(int i, MultipartFile multipartFile) {
       // GoodsPicture goodsPicture = null;
        String urls=null;
        try {
            if (multipartFile.isEmpty()) return null;  //非空检测
            if (multipartFile.getSize() / 1024 / 1024 > 10) return null;  //图片大小检测 10MB

            //创建图片唯一id
            String imageId = RandomUtils.getrandomImageId();

            //传输对象
            MinioClient minioClient = new MinioClient(url, accessKey, secretKey);

            //图片类型(注意：图片类型与后缀不是一回事,如 jpg格式为：img/jpeg)
            String contentType = multipartFile.getContentType();

            //原图片名称
            String oldName =multipartFile.getOriginalFilename();

           //截取图片后缀
            String suffix=StringUtils.substring(oldName, oldName.lastIndexOf(".") + 1);

            //把文件放置MinIo中：桶(文件夹)、文件名、文件流、类型
            minioClient.putObject(bucket, type(i)+imageId +"."+ suffix, multipartFile.getInputStream(), contentType);

            //创建图片操作对象,用于插入数据库： 图片id,原文件名,现图片名称,商品id,图片路径,用途,图片类型,图片大小,状态,图片url,图片类型,状态,排序,创建时间,更新时间,逻辑删除,
            //goodsPicture = new GoodsPicture(imageId, oldName,imageId +"."+ suffix, null, bucket+"/"+type(i)+imageId+"."+suffix, suffix, (int) multipartFile.getSize(), null, 0, -1, DateUtils.getNowDate(), null, 0);
            System.out.println(imageId+"."+suffix);
            urls="http://121.36.30.36:9000/j348teaching/"+type(i)+imageId+"."+suffix;
        } catch (Exception e) {
//            log.error("上传图片异常！！", e);
            return null;
        }
        return urls;
    }

//    /**
//     * 批量上传
//     *
//     * @return 图片对象
//     */
//    public static List<GoodsPicture> uploadImage(int i, List<MultipartFile> multipartFileList) {
//        List<GoodsPicture> goodsPictures = new ArrayList<>();
//        for (MultipartFile multipartFile : multipartFileList) {
//            goodsPictures.add(uploadImage(i, multipartFile));
//        }
//        return goodsPictures;
//    }

    /**
     * 删除图片
     */
    public static Boolean delImage(int i, String name) {
        try {
            //获取对minio操作对象
            MinioClient minioClient = new MinioClient(url, accessKey, secretKey);
            //进行删除操作
            minioClient.removeObject(bucket, type(i)+name);
        } catch (Exception e) {
//            log.error("删除图片失败,位置:" + bucket+ type(i) + ",图片：" + name, e);
            return false;
        }
        return true;
    }

    /**
     * 批量删除根据自己业务实现
     */
}
